package com.holly.unit.deform.api;

import com.alibaba.fastjson.JSONObject;
import com.holly.unit.core.pojo.response.ResponseData;

import javax.servlet.http.HttpServletRequest;

/**
 * 接口描述: 表单设计器API
 *
 * @author fxr
 * @version 1.0.0
 * @date 2022/4/2 10:00
 */
public interface DeformEngineApi<T,E> {


    /**
     *
     * 查询表单浏览页面的数据
     *
     * @param designForm
     * @param dataId
     * @param modelAndView
     * @return
     */

    public T queryFormViewData(E designForm, String dataId, String onlineDataId, T modelAndView);

    /**
     * 查询表单浏览页面的数据
     *
     * @param desformId
     * @param dataId 表单设计数据json的数据ID
     * @param onlineDataId online表数据ID
     * @param modelAndView
     * @return
     */
    public T queryFormViewById(String desformId, String dataId, String onlineDataId, T modelAndView);

    /**
     * 查询表单浏览页面的数据
     *
     * @param desformCode
     * @param dataId  表单设计数据json的数据ID
     * @param onlineDataId  online表数据ID
     * @param modelAndView
     * @return
     */
    public T queryFormViewByCode(String desformCode, String dataId, String onlineDataId,T modelAndView);

    /**
     * 查询表单浏览页面的数据（自动判断是否有移动端视图，有的话就走移动端视图）
     *
     * @param desformCode
     * @param dataId  表单设计数据json的数据ID
     * @param onlineDataId  online表数据ID
     * @param modelAndView
     * @return
     */
    public T queryFormAutoViewByCode(String desformCode, String dataId, String onlineDataId,T modelAndView);

    /**
     * 查询表单浏览页面的数据
     *
     * @param desformCode
     * @param dataId       表单设计数据json的数据ID
     * @param onlineDataId online表数据ID
     * @param isExternal   是否是外部打开的链接
     * @param modelAndView
     * @return
     */
    public T queryFormViewByCode(String desformCode, String dataId, String onlineDataId, boolean isExternal, T modelAndView);


    /***
     * 自定义表单设计器 检验 Token
     * @param t
     * @param request
     * @return
     */
    public T doIndex(T t, HttpServletRequest request);

    /***
     * 获取desgForm
     * @param id
     * @param isTemplet
     * @param t
     * @param request
     * @return
     */
    T desgForm(String id, Boolean isTemplet, T t, HttpServletRequest request);

    T doFormView(T t, String urlType, String desformCode, String dataId, String onlineDataId, HttpServletRequest request);

    /***
     * 表单编辑和修改
     * @param desformId
     * @param dataId
     * @param t
     * @param request
     * @return
     */
    T formView(String desformId, String dataId, T t, HttpServletRequest request);

    /***
     * 表单新增
     * @param desformCode
     * @param t
     * @param request
     * @return
     */
    T addDesformData(String desformCode, T t, HttpServletRequest request);

    /***
     * 表单编辑修改
     * @param desformCode
     * @param dataId
     * @param t
     * @param request
     * @return
     */
    T formEditByCode(String desformCode, String dataId, T t, HttpServletRequest request);


    /***
     * 直接通过online dataid进行渲染
     * @param desformCode
     * @param onlineDataId
     * @param t
     * @param request
     * @return
     */
    T formEditByCodeByOnline(String desformCode, String onlineDataId, T t, HttpServletRequest request);

    /***
     * 表单预览
     * 示例： desform/detail/cc_user_sjq/1252475006019010561
     * @param desformCode
     * @param dataId
     * @param t
     * @param request
     * @return
     */
    T formDetail(String desformCode, String dataId, T t, HttpServletRequest request);

    /***
     * 表单预览
     * @param desformCode
     * @param onlineDataId
     * @param t
     * @param request
     * @return
     */
    T formDetailByOnline(String desformCode, String onlineDataId, T t, HttpServletRequest request);

    /***
     * 自定义接收URL：将数据抽取到新的表单 【测试示例】
     * @param json
     * @param request
     * @return
     */
    ResponseData customUrlTest(JSONObject json, HttpServletRequest request);
















}
